#ifndef _BLOCKMAP_H
#define _BLOCKMAP_H
/* File : blockmap.h */

#include <stdio.h>
#include <stdlib.h> 

typedef union{
	unsigned char val;
	struct{
		unsigned int bit7:1;
		unsigned int bit6:1;
		unsigned int bit5:1;
		unsigned int bit4:1;
		unsigned int bit3:1;
		unsigned int bit2:1;
		unsigned int bit1:1;
		unsigned int bit0:1;
	}bits;
}Tbyte;

typedef Tbyte Tblockmap[125000];

int getbit(Tbyte Byte, int n);
// untuk mengakses bit (ini method private, ga dipake diluar)
void setbit(Tbyte* Byte, int n, unsigned int value);
// untuk mengeset bit (ini ini method private, ga dipake diluar)

void initBlockmap(FILE* fs, Tblockmap* Tb);
// untuk menginisiasi Tabel bitmap dari file

void fillBlocknum(FILE* fs, Tblockmap* Tb, int blocknum);
//untuk mengeset bit yang mewakili blocknum dengan 1

void releaseBlocknum(FILE* fs, Tblockmap* Tb, int blocknum);
//untuk mengeset bit yang mewakili blocknum dengan 0

int getBlocknum(Tblockmap Tb, int blocknum);
//untuk mengakses bit yang mewakili blocknum

int countFilledBlock(Tblockmap Tb, int Max);
//untuk menghitung jumlah block yang sudah terisi

int countBlankBlock(Tblockmap Tb, int Max);
//untuk menghitung jumlah block yang belum terisi

#endif
